<?php

class DoctrineORM extends DoctrineObjectModel {
	
	public function __construct($options = null) {		
		$this->config = new Doctrine\ORM\Configuration();
		
		$this->option('setMetadataCacheImpl', new \Doctrine\Common\Cache\ArrayCache);
		$this->option('setProxyDir', __DIR__ . '/Proxies')->option('setProxyNamespace', 'Proxies');
		$this->option('setEntityNamespaces', array('Entities'));
		
		$connectionOptions = array_merge(array(
			'driver' => 'pdo_mysql',
			'host' => 'localhost',
			'user' => 'root',
			'pass' => '',
			'dbname' => 'test',			
		), !empty($options[':connection']) ? $options[':connection'] : array());
		
		foreach ($options as $option => $value) {
			if ($option{0} == ':') continue;
			$this->option($option, $value);
		}
		
		$driver = new Doctrine\ORM\Mapping\Driver\YamlDriver(empty($options[':conf']) ? array(__DIR__ . '/conf') : $options[':conf']);
		$this->option('setMetadataDriverImpl', $driver);

		$this->manager = Doctrine\ORM\EntityManager::create($connectionOptions, $this->config);
		return $this;
	}
	
	public function cli() {
		if (empty($this->manager)) throw new Exception('EntityManager object is empty');
		
		$helpers = array(
			'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($this->manager->getConnection()),
			'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($this->manager)
		);
		$cli = new \Symfony\Component\Console\Application('Doctrine Command Line Interface', Doctrine\Common\Version::VERSION);
		$cli->setCatchExceptions(true);
		$helperSet = $cli->getHelperSet();
		foreach ($helpers as $name => $helper) {
			$helperSet->set($helper, $name);
		}
		$cli->addCommands(array(
			// DBAL Commands
			new \Doctrine\DBAL\Tools\Console\Command\RunSqlCommand(),
			new \Doctrine\DBAL\Tools\Console\Command\ImportCommand(),

			// ORM Commands
			new \Doctrine\ORM\Tools\Console\Command\ClearCache\MetadataCommand(),
			new \Doctrine\ORM\Tools\Console\Command\ClearCache\ResultCommand(),
			new \Doctrine\ORM\Tools\Console\Command\ClearCache\QueryCommand(),
			new \Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand(),
			new \Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand(),
			new \Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand(),
			new \Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand(),
			new \Doctrine\ORM\Tools\Console\Command\ConvertDoctrine1SchemaCommand(),
			new \Doctrine\ORM\Tools\Console\Command\GenerateRepositoriesCommand(),
			new \Doctrine\ORM\Tools\Console\Command\GenerateEntitiesCommand(),
			new \Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand(),
			new \Doctrine\ORM\Tools\Console\Command\ConvertMappingCommand(),
			new \Doctrine\ORM\Tools\Console\Command\RunDqlCommand(),
			new \Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand(),
		));
		$cli->run();
	}
}
